﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using VentaPorCatalogos.UserControls;
using BLL;
using BE;
using BE.SearchCriteria;
using System.Text;
using BLL.Exceptions;

namespace VentaPorCatalogos.Pages
{
    public partial class Usuarios : VentaPorCatalogos.Page
    {
        #region "Events"
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState.Add("FormBehavior", behavior.Initial);
                Session["SearchCriteria"] = null;
                Session["Model"] = null;
            }
        }

        protected void Page_PreRender(object sender, EventArgs e)
        {
            ConfigurarFormBehaviour();
        }

        #endregion

        #region "Buttons"

        protected void botComandos_OnBotonClick(object sender, BotoneraEventArgs e)
        {
            try
            {
                UsuarioBE oUsuarioBE = new UsuarioBE();
                behavior wComportamiento;

                switch (e.Boton)
                {
                    case BotonesTipos.Buscar:
                        if (BuscarElemento())
                            SetFormBehaviour(behavior.View);
                        else
                            e.CancelarOperacion = true;  // Evita que la botonera pase a modo consulta, si no se encontró un elemento.                        
                        break;

                    case BotonesTipos.Nuevo:
                        SetFormBehaviour(behavior.New);
                        HabilitarControles(true, divCampos.Controls);
                        BlanquearControles(divCampos.Controls);
                        chkCambiarPassword.Enabled = false;
                        chkCambiarPassword.Checked = true;
                        break;

                    case BotonesTipos.Editar:
                        SetFormBehaviour(behavior.Edit);
                        HabilitarControles(true, divCampos.Controls);
                        chkCambiarPassword.Checked = false;
                        break;

                    case BotonesTipos.Eliminar:
                        UsuarioBLL.Delete(GetModel<UsuarioBE>());
                        SetModel<UsuarioBE>(null);
                        SetFormBehaviour(behavior.Initial);
                        break;

                    case BotonesTipos.Aceptar:
                        wComportamiento = (behavior)ViewState["FormBehavior"];
                        LeerDatosDesdeControles(oUsuarioBE);

                        switch (wComportamiento)
                        {
                            case behavior.New:
                                UsuarioBLL.Insertar(oUsuarioBE);
                                hidIdElemento.Value = oUsuarioBE.IdUsuario.ToString();
                                BuscarElemento();
                                MostrarMensaje("Usuario registrado correctamente");
                                break;
                            case behavior.Edit:
                                UsuarioBLL.Modificar(oUsuarioBE);
                                MostrarMensaje("Usuario modificado correctamente");
                                break;
                        }
                        chkCambiarPassword.Checked = false;
                        SetFormBehaviour(behavior.View);
                        break;

                    case BotonesTipos.Cancelar:
                        wComportamiento = GetFormBehaviour();
                        switch (wComportamiento)
                        {
                            case behavior.Edit:
                                BuscarElemento();
                                SetFormBehaviour(behavior.View);
                                break;
                            case behavior.New:
                                BlanquearControles(divCampos.Controls);
                                SetFormBehaviour(behavior.Initial);
                                break;
                            default:
                                break;
                        }
                        break;

                    default:
                        break;
                }
            }
            catch (BLLException bllEx)
            {
                MostrarMensaje(bllEx.Message);
            }
            catch (Exception)
            {
                MostrarMensaje("Se ha producido un inconveniente procesando la operación. Por favor intente nuevamente.");
            }

        }

        protected void btnSelZona_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            if (txtZona.Text.Trim().Length > 0)
            {
                ZonaSC wFiltroSC = new ZonaSC();
                wFiltroSC.Descripcion = txtZona.Text;
                List<ZonasBE> wListResultado = ZonaBLL.SeleccionarTodos(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        hidIdZona.Value = wListResultado[0].IdZona.ToString();
                        txtZona.Text = wListResultado[0].Descripcion;
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarZona(\"{0}\");", txtZona.Text));
                }
                else
                {
                    txtZona.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarZona(\"{0}\");", txtZona.Text));
            }
        }

        protected void btnSelVendedor_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            if (txtVendedor.Text.Trim().Length > 0)
            {
                VendedorSC wFiltroSC = new VendedorSC();
                wFiltroSC.IdVendedor = Int32.Parse(hidIdVendedor.Value);
                List<VendedorBE> wListResultado = VendedorBLL.SeleccionarTodos(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        hidIdVendedor.Value = wListResultado[0].IdVendedor.ToString();
                        txtVendedor.Text = wListResultado[0].ApellidoNombre;
                        //MostrarZonas();
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarVendedor(\"{0}\");", txtVendedor.Text));
                }
                else
                {
                    txtVendedor.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarVendedor(\"{0}\");", txtVendedor.Text));
            }

        }
        #endregion

        #region "Method"
        private void ConfigurarFormBehaviour()
        {
            behavior wComportamiento;
            wComportamiento = GetFormBehaviour();
            switch (wComportamiento)
            {
                case behavior.Initial:
                    HabilitarControles(false, divCampos.Controls);
                    break;

                case behavior.New:
                    break;

                case behavior.Edit:
                    break;

                case behavior.View:
                    HabilitarControles(false, divCampos.Controls);
                    break;
            }
        }

        private void LeerDatosDesdeControles(UsuarioBE oUsuarioBE)
        {
            int resultado;
            if (int.TryParse(lblIdUsuario.Text, out resultado))
                oUsuarioBE.IdUsuario = resultado;
            oUsuarioBE.Nombre = txtNombre.Text;
            oUsuarioBE.Perfil = cmbPerfil.Value;
            int wIdVendedor;
            oUsuarioBE.oVendedorBE = new VendedorBE();
            if (int.TryParse(hidIdVendedor.Value, out wIdVendedor))
                oUsuarioBE.oVendedorBE.IdVendedor = wIdVendedor;
            int wIdZona;
            oUsuarioBE.oZonasBE = new ZonasBE();
            if (int.TryParse(hidIdZona.Value, out wIdZona))
                oUsuarioBE.oZonasBE.IdZona = wIdZona;
            oUsuarioBE.Email = txtEmail.Text;
            oUsuarioBE.Activo = chkActivo.Checked;

            oUsuarioBE.FechaAlta = DateTime.Today; 
            oUsuarioBE.Usuario = txtUsuario.Text;

            if (chkCambiarPassword.Checked)
                oUsuarioBE.Password = txtPassword.Text;
        }

        private bool BuscarElemento()
        {
            try
            {                
                int id;
                if (!int.TryParse(hidIdElemento.Value, out id))
                    return false;

                UsuarioBE oUsuarioBE = new UsuarioBE();
                oUsuarioBE.IdUsuario = id;

                oUsuarioBE = UsuarioBLL.SeleccionarPorId(oUsuarioBE);
                if (oUsuarioBE == null)
                    return false;

                SetModel<UsuarioBE>(oUsuarioBE);

                // Mostrar datos del Usuario
                lblIdUsuario.Text = oUsuarioBE.IdUsuario.ToString();
                txtNombre.Text = oUsuarioBE.Nombre;
                cmbPerfil.Value = oUsuarioBE.Perfil;
                if (oUsuarioBE.oVendedorBE != null)
                {
                    hidIdVendedor.Value = oUsuarioBE.oVendedorBE.IdVendedor.ToString();
                    txtVendedor.Text = oUsuarioBE.oVendedorBE.ApellidoNombre;
                }
                if (oUsuarioBE.oZonasBE  != null)
                {
                    hidIdZona.Value = oUsuarioBE.oZonasBE.IdZona.ToString();
                    txtZona.Text = oUsuarioBE.oZonasBE.Descripcion;
                }
                txtEmail.Text = oUsuarioBE.Email;
                chkActivo.Checked = oUsuarioBE.Activo;

                txtUsuario.Text = oUsuarioBE.Usuario;
                txtPassword.Text = oUsuarioBE.Password;  


                return true;
            }
            catch (Exception)
            {
                throw;
            }
        }


        private bool CompararContraseñas()
        {
            if (txtPassword.Text.Equals(txtConfirmarPassword.Text))
            {
                return true;
            }

            return false;
        }
        
        #endregion


    }
}
